home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QuickTime - The Beta Release
/
QuickTime - The Beta Release.iso
/
Programming Stuff
/
Sample Code
/
MovieController Exerciser
/
MovieController Exerciser.c
< prev
next >
Wrap
Text File
|
1991-09-11
|
20KB
|
982 lines
/*
* file: Double Movie Viewer.c
*
* started 7 July 1988 09:34
* david van brink
*
*/
/*
* QT Bug - if you quit the application without disposing the
* windows nor the movie controller nor movie, then you
* get a componentmgr error.
*/
/*--------------------------
Inclusions
--------------------------*/
#include <QuickDraw.h>
#include <Windows.h>
#include <Scrap.h>
#include "BigEasy2.h"/**/
#include <Movies.h>
//#include "MovieController.h"
#include "ImageCompression.h"
//#include "StandardPreview.h"
/*--------------------------
Limits and Konstants
--------------------------*/
enum
{
mOpen = 23,
mClose,
mLoop,
mPalindrome,
mCopyFrame,
mSelectAll,
mEdit,
mHideController,
mUseBadge,
mAttach,
mFrame,
mSteppers,
mSpeaker,
mEnlarge,
mBumpControllerDown,
mGrowable
};
#define kHeaderHeight 0
#define kConfig 1
# if kConfig == 1
#define kMovieMargin 14
#define kMoviesPerDoc 2
#elif kConfig == 2 || 1
#define kMovieMargin 0
#define kMoviesPerDoc 1
#endif
/*--------------------------
Types and globals
--------------------------*/
typedef struct
{
Movie movie;
MovieController mc;
Boolean loop;
Boolean palindrome;
Boolean editing;
Boolean controllerHidden;
Boolean useBadge;
Boolean attached;
Boolean framed;
Boolean steppers;
Boolean speaker;
Boolean growable;
} DocMovie;
typedef struct TDoc
{
Boolean used;
WindowPtr w;
short resRefNum;
short resID;
unsigned char movieName[40];
DocMovie m[kMoviesPerDoc];
short whichMovie;
short oldWhichMovie;
} TDoc;
#define kFirstDocWindow 1
#define kDocMax 5
TDoc gDoc[kDocMax];
short gDocCount;
#define SignIt(x) ( (x)?1:-1)
/*--------------------------
Prototypes
--------------------------*/
static pascal Boolean MyMCActionFilter(MovieController mc, short *action, void *params);
static void DrawDoc(short n);
static void ClickDoc(short n,Point p,short mods);
static void KeyDoc(short n,short key,short code, short mods);
static void GoAwayDoc(short n);
static void ActivateDoc(short n);
static void DeactivateDoc(short n);
static void SetDocMenus(TDoc *d);
static void IdleDoc(short n);
static void LetsQuit(void);
static void OpenAWindow(void);
static void OpenDoc(void);
static void MakeWindow(void);
static void FrameThisDocMovie(TDoc *d,short whichMovie,Boolean on);
static void ToggleSomethingDoc(short n,short menuItem,short menuRef);
static void BumpControllerDownDoc(short n,short menuItem,short menuRef);
static void LoopDoc(short n);
static void PalindromeDoc(short n);
static void SelectAll(short n);
static void EditDoc(short n,short item, short menuID);
static void HideControllerDoc(short n,short item, short menuID);
static void InitVars(void);
static void CopyFrameEdit(short n);
static void DrawSelectedMovie(short n);
static void OpenUpAMovieAndAControllerPlease(FSSpec *someFile,Movie *outMovie,MovieController *outMovieController,
Point where,WindowPtr w);
static void GetMovieControllerTotalRect(Movie m,MovieController mc,Rect *r);
static void NudgeDocMovie(DocMovie *dm,short top,short left);
static short GetModKeys(void);
static void UndoDoc(short n);
static void CutDoc(short n);
static void CopyDoc(short n);
static void PasteDoc(short n);
/*--------------------------
Computer Programs
--------------------------*/
static void GetMovieControllerTotalRect(Movie m,MovieController mc,Rect *r)
{
Rect r1, r2;
MCGetControllerBoundsRect(mc, &r1);
GetMovieBox(MCGetIndMovie(mc, 1), &r2);
if(EmptyRect(&r2))
*r = r1;
else
UnionRect(&r1,&r2,r);
}
pascal Boolean MyMCActionFilter(MovieController mc, short *action, void *params)
{
short i,j;
Rect r,rr;
TDoc *d;
DocMovie *dm;
GrafPtr oldPort;
if (! (*action == mcActionControllerSizeChanged))
return false;
for(i = 0; i< kDocMax; i++)
for(j = 0; j<kMoviesPerDoc; j++)
if(gDoc[i].m[j].mc == mc)
goto gotIt;
goto goHome;
gotIt:
d = &gDoc[i];
GetMovieControllerTotalRect(MCGetIndMovie(d->m[0].mc, 1),d->m[0].mc,&r);
r.right += kMovieMargin;
r.bottom += kMovieMargin;
for(i = 1; i<kMoviesPerDoc; i++)
{
dm = &d->m[i];
MCSetActionFilter(dm->mc, 0);
NudgeDocMovie(dm,r.top,r.right);
MCSetActionFilter(dm->mc,(MCActionFilter)MyMCActionFilter);
GetMovieControllerTotalRect(dm->movie,dm->mc,&rr);
r.right = rr.right + kMovieMargin;
rr.bottom += kMovieMargin;
if(rr.bottom > r.bottom)
r.bottom = rr.bottom;
}
SizeWindow(d->w,r.right-1 ,r.bottom-1 ,true);
GetPort(&oldPort);
SetPort(d->w);
// InvalRect(&gBigRect);
SetPort(oldPort);
goHome:
return false;
}
static void NudgeDocMovie(DocMovie *dm,short top,short left)
/*
* One way or another, make the movie/controller top/left appear here.
*/
{
Rect mR,mcR;
OSErr thisError;
if(kMoviesPerDoc < 2)
return;
MCGetControllerBoundsRect(dm->mc,&mcR);
GetMovieBox(dm->movie,&mR);
OffsetRect(&mR,left - mR.left,top - mR.top);
SetMovieBox(dm->movie,&mR);
thisError = GetMoviesError();
thisError = MCMovieChanged(dm->mc,dm->movie);
GetMovieBox(dm->movie,&mR);
}
void DrawDoc(short n)
/*
* Draws the window.
*/
{
Rect r;
register TDoc *d;
short i;
d = &gDoc[n-kFirstDocWindow];
EraseRect(&gBigRect);
for(i = 0; i<kMoviesPerDoc; i++)
MCDraw(d->m[i].mc,d->w);
DrawSelectedMovie(n);
}
void FrameThisDocMovie(TDoc *d,short whichMovie,Boolean on)
{
register DocMovie *dm;
Rect r;
RgnHandle rh;
if( kMoviesPerDoc < 2 || whichMovie < 0)
return;
PenSize(2,2);
if(on)
ForeColor(blackColor);
else
ForeColor(whiteColor);
dm = &d->m[whichMovie];
rh = MCGetWindowRgn(dm->mc, d->w);
r = (**rh).rgnBBox;
DisposeRgn(rh);
InsetRect(&r,-4,-4);
FrameRect(&r);
ForeColor(blackColor);
}
void DrawSelectedMovie(short n)
{
register TDoc *d;
if(d->oldWhichMovie != d->whichMovie)
{
FrameThisDocMovie(d,d->oldWhichMovie,0);
d->oldWhichMovie = d->whichMovie;
}
FrameThisDocMovie(d,d->whichMovie,1);
}
void ClickDoc(short n,Point p,short mods)
/*
* Come here for a click in the window.
*/
{
register TDoc *d;
register DocMovie *dm;
short i;
Rect r;
d = &gDoc[n-kFirstDocWindow];
for(i = 0; i<kMoviesPerDoc; i++)
{
dm = &d->m[i];
GetMovieControllerTotalRect(dm->movie,dm->mc,&r);
if(PtInRect(p,&r))
{
d->whichMovie = i;
SetDocMenus(d);
DrawSelectedMovie(n);
MCClick(dm->mc, d->w, p, TickCount(), mods);
goto doneClick;
}
}
/*
* Click outside the active movie closes
* it if it's using badging.
*/
dm = & d->m[d->whichMovie];
if(dm->useBadge)
MCSetVisible(dm->mc,false);
doneClick:;
}
void KeyDoc(short n,short key,short code, short mods)
{
register TDoc *d;
MovieController mc;
d = &gDoc[n-kFirstDocWindow];
mc = d->m[d->whichMovie].mc;
switch(key)
{
case 9: /* tab */
if(mods & shiftKey)
d->whichMovie += kMoviesPerDoc - 1;
else
d->whichMovie += 1;
d->whichMovie %= kMoviesPerDoc;
DrawSelectedMovie(n);
SetDocMenus(d);
break;
default:
MCKey(mc,key,mods);
break;
}
}
void GoAwayDoc(short n)
/*
* Close that window...
*/
{
register TDoc *d;
register DocMovie *dm;
short i;
d = &gDoc[n-kFirstDocWindow];
for(i = 0; i<kMoviesPerDoc; i++)
{
dm = &d->m[i];
CloseComponent(dm->mc);
DisposeMovie(dm->movie);
dm->mc = 0;
dm->movie = 0;
}
UninstallWindow(n);
d->used = false;
gDocCount--;
}
void ActivateDoc(short n)
{
register TDoc *d;
short i;
d = &gDoc[n-kFirstDocWindow];
for(i = 0; i<kMoviesPerDoc; i++)
MCActivate(d->m[i].mc,d->w,true);
EnDisEdits(0,1,1,1,0);
SetMenuItem(mClose,1,0,0,nil); /* enable "Close" menu item */
SetMenuItem(mOpen,SignIt(gDocCount < kDocMax),0,0,nil); /* disable "Open" menu item */
SetDocMenus(d);
}
void UndoDoc(short n)
{
register TDoc *d;
register DocMovie *dm;
d = &gDoc[n-kFirstDocWindow];
dm = &d->m[d->whichMovie];
MCUndo(dm->mc);
}
void CutDoc(short n)
{
register TDoc *d;
register DocMovie *dm;
Movie m;
d = &gDoc[n-kFirstDocWindow];
dm = &d->m[d->whichMovie];
m = MCCut(dm->mc);
PutMovieOnScrap(m, 0);
DisposeMovie(m);
}
void CopyDoc(short n)
{
register TDoc *d;
register DocMovie *dm;
Movie m;
d = &gDoc[n-kFirstDocWindow];
dm = &d->m[d->whichMovie];
m = MCCopy(dm->mc);
PutMovieOnScrap(m, 0);
DisposeMovie(m);
}
void PasteDoc(short n)
{
Movie movieScrap;
register TDoc *d;
register DocMovie *dm;
d = &gDoc[n-kFirstDocWindow];
dm = &d->m[d->whichMovie];
movieScrap = NewMovieFromScrap(0);
MCPaste(dm->mc,movieScrap);
DisposeMovie(movieScrap);
}
void CopyFrameEdit(short n)
{
register TDoc *d;
register DocMovie *dm;
PicHandle p,pp;
long size;
OSErr thisError;
d = &gDoc[n-kFirstDocWindow];
dm = &d->m[d->whichMovie];
p = GetMoviePict(dm->movie,GetMovieTime(dm->movie,nil));
pp = (PicHandle)NewHandle(0);
size = GetHandleSize((Handle)p);
thisError = FCompressPicture(p, pp,
0, 0,0x00030000,
true,true,nil,
'raw ',0);
KillPicture(p);
size = GetHandleSize((Handle)pp);
HLock((Handle)pp);
ZeroScrap();
PutScrap(size,'PICT',(Ptr)*pp);
HUnlock((Handle)pp);
KillPicture(pp);
}
void SetDocMenus(TDoc *d)
/*
* Just update the on-the-fly changeable menus
*/
{
register DocMovie *dm;
dm = &d->m[d->whichMovie];
SetMenuItem(mLoop,1,SignIt(dm->loop),'•',nil);
SetMenuItem(mPalindrome,1,SignIt(dm->palindrome),'•',nil);
SetMenuItem(mEdit,1,SignIt(dm->editing),'•',nil);
SetMenuItem(mHideController,1,SignIt(dm->controllerHidden),'•',nil);
SetMenuItem(mUseBadge,1,SignIt(dm->useBadge),'•',nil);
SetMenuItem(mAttach,1,SignIt(dm->attached),'•',nil);
SetMenuItem(mFrame,1,SignIt(dm->framed),'•',nil);
SetMenuItem(mSteppers,1,SignIt(dm->steppers),'•',nil);
SetMenuItem(mSpeaker,1,SignIt(dm->speaker),'•',nil);
SetMenuItem(mEnlarge,1,0,0,nil);
SetMenuItem(mBumpControllerDown,1,0,0,nil);
SetMenuItem(mGrowable,1,SignIt(dm->growable),'•',nil);
SetMenuItem(mSelectAll,SignIt(dm->editing),0,0,nil);
}
void DeactivateDoc(short n)
{
register TDoc *d;
short i;
d = &gDoc[n-kFirstDocWindow];
for(i = 0; i<kMoviesPerDoc; i++)
if(d->m[i].mc)
MCActivate(d->m[i].mc,d->w,false);
SetMenuItem(mClose,-1,0,0,nil); /* disable "Close" menu item */
SetMenuItem(mOpen,1,0,0,nil); /* enable "Open" menu item */
/*
* Deactivate all the movie flags
*/
SetMenuItem(mLoop,-1,-1,0,nil);
SetMenuItem(mPalindrome,-1,-1,0,nil);
SetMenuItem(mEdit,-1,-1,0,nil);
SetMenuItem(mHideController,-1,-1,0,nil);
SetMenuItem(mUseBadge,-1,-1,0,nil);
SetMenuItem(mFrame,-1,-1,0,nil);
SetMenuItem(mSteppers,-1,-1,0,nil);
SetMenuItem(mSpeaker,-1,-1,0,nil);
SetMenuItem(mAttach,-1,-1,0,nil);
SetMenuItem(mEnlarge,-1,0,0,nil);
SetMenuItem(mBumpControllerDown,-1,0,0,nil);
SetMenuItem(mGrowable,-1,0,0,nil);
SetMenuItem(mSelectAll,-1,-1,0,nil);
}
void IdleDoc(short n)
{
register TDoc *d;
short i;
d = &gDoc[n-kFirstDocWindow];
for(i = 0; i<kMoviesPerDoc; i++)
MCIdle(d->m[i].mc);
}
void LetsQuit(void)
{
short i;
for(i = 0; i<kDocMax; i++)
{
if(gDoc[i].used)
GoAwayDoc(i + kFirstDocWindow);
}
gQuitApp++;
}
pascal void ReallyStandardGetFile(StringPtr prompt,
FileFilterProcPtr fileFilter,
short numTypes,
SFTypeList typeList,
StandardFileReply *reply)
= {0x3F3C,0x0006,0xA9EA};
void OpenDoc(void)
{
StandardFileReply sfr;
SFTypeList aType;
unsigned char *x;
TDoc *d;
short i,n;
long thisError;
Rect r,r2;
ComponentDescription td;
Component t;
Point po;
DocMovie *dm;
for(n = 0; n<kDocMax; n++)
{
d = &gDoc[n];
if(!d->used)
goto gotOne;
}
goto goHome;
gotOne:
x = (void *)&"\pSelect a movie…";
aType[0] = MovieFileType;
ReallyStandardGetFile(x,nil,1,aType,&sfr);
if(!sfr.sfGood)
goto goHome;
gDocCount++;
SetRect(&r,100,100,300,300);
d->w = InstallWindow(-(n+kFirstDocWindow),sfr.sfFile.name,&r,noGrowDocProc,0,
DrawDoc,ClickDoc,KeyDoc,GoAwayDoc,
ActivateDoc,DeactivateDoc,(void *)IdleDoc);
d->used = true;
d->oldWhichMovie = 0;
for(i = 0; i<kMoviesPerDoc; i++)
{
dm = &d->m[i];
dm->loop = false;
dm->palindrome = false;
dm->editing = false;
dm->attached = true;
dm->speaker = true;
dm->steppers = true;
dm->framed = true;
dm->useBadge = false;
dm->controllerHidden = false;
}
po.h = po.v = kMovieMargin;
n += kFirstDocWindow;
for(i = 0; i < kMoviesPerDoc; i++)
{
dm = &d->m[i];
OpenUpAMovieAndAControllerPlease(&sfr.sfFile,&dm->movie,&dm->mc,po,d->w);
GetMovieControllerTotalRect(dm->movie,dm->mc,&r);
SetRect(&r, 0, 0, 9000, 9000);
MCDoAction(dm->mc, mcActionSetGrowBoxBounds, &r);
MCSetActionFilter(dm->mc, (MCActionFilter)MyMCActionFilter);
d->whichMovie = i;
// ToggleSomethingDoc(n,0,mHideController);
// ToggleSomethingDoc(n,0,mUseBadge);
}
d->whichMovie = 0;
i = mcActionControllerSizeChanged;
MyMCActionFilter(d->m[0].mc, &i, 0);
ShowWindow(d->w);
goHome:;
}
void OpenUpAMovieAndAControllerPlease(FSSpec *someFile,Movie *outMovie,MovieController *outMovieController,
Point where,WindowPtr w)
{
short resID;
short resRefNum;
Movie m;
MovieController mc;
Rect r;
ComponentDescription td;
ComponentResult thisError;
Component t;
thisError = OpenMovieFile( someFile, &resRefNum,fsRdPerm );
resID = 0;
// m = NewMovie(1);
thisError = NewMovieFromFile( &m, resRefNum, &resID, 0,0, nil );
GetMovieBox( m, &r );
thisError = GetMoviesError();
if(r.right - r.left < 50)
r.right = r.left + 50;
if(r.bottom - r.top < 50)
r.bottom = r.top + 50;
OffsetRect(&r,100 - r.left,100 - r.top);
r.bottom += kHeaderHeight;
r.bottom += kMovieMargin * 2;
r.right += kMovieMargin * 2;
SetMovieGWorld( m, (CGrafPtr)w, nil );
SetMovieActive( m, true );
OffsetRect(&r,-r.left,kHeaderHeight-r.top);
r.bottom -= kHeaderHeight;
InsetRect(&r,kMovieMargin,kMovieMargin);
SetMovieBox(m,&r);
UpdateMovie(m);
td.componentType = 'play';
td.componentSubType =0;
td.componentManufacturer = 'appl';
td.componentFlags = 0;
td.componentFlagsMask = 0;
t = FindNextComponent(0, &td);
mc = OpenComponent(t);
MCDoAction(mc,mcActionSetKeysEnabled,(void *)true);
MCSetControllerAttached(mc,true);
MCSetMovie(mc,m,w,where);
MCSetVisible(mc,true);
*outMovie = m;
*outMovieController = mc;
}
void ToggleSomethingDoc(short n,short menuItem,short menuRef)
{
register TDoc *d;
register DocMovie *dm;
OSErr thisError;
d = &gDoc[n-kFirstDocWindow];
dm = &d->m[d->whichMovie];
switch(menuRef)
{
case mLoop:
dm->loop = !dm->loop;
MCDoAction(dm->mc, mcActionSetLooping, (void *)dm->loop);
break;
case mPalindrome:
dm->palindrome = !dm->palindrome;
MCDoAction(dm->mc, mcActionSetLoopIsPalindrome, (void *)dm->palindrome);
break;
case mEdit:
dm->editing = !dm->editing;
MCEnableEditing(dm->mc, dm->editing);
break;
case mHideController:
FrameThisDocMovie(d,d->whichMovie,0);
dm->controllerHidden = !dm->controllerHidden;
MCSetVisible(dm->mc, !dm->controllerHidden);
FrameThisDocMovie(d,d->whichMovie,1);
break;
case mUseBadge:
dm->useBadge = !dm->useBadge;
MCDoAction(dm->mc, mcActionSetUseBadge,(void *)dm->useBadge);
break;
case mAttach:
FrameThisDocMovie(d,d->whichMovie,0);
dm->attached = !dm->attached;
MCSetControllerAttached(dm->mc,dm->attached);
FrameThisDocMovie(d,d->whichMovie,1);
break;
case mFrame:
{
long flags;
FrameThisDocMovie(d,d->whichMovie,0);
MCDoAction(dm->mc,mcActionGetFlags,&flags);
dm->framed = !dm->framed;
if(dm->framed)
flags &= ~mcFlagSuppressMovieFrame;
else
flags |= mcFlagSuppressMovieFrame;
MCDoAction(dm->mc,mcActionSetFlags,(void *)flags);
FrameThisDocMovie(d,d->whichMovie,1);
}
break;
case mSteppers:
{
long flags;
MCDoAction(dm->mc,mcActionGetFlags,&flags);
dm->steppers = !dm->steppers;
if(dm->steppers)
flags &= ~mcFlagSuppressStepButtons;
else
flags |= mcFlagSuppressStepButtons;
MCDoAction(dm->mc,mcActionSetFlags,(void *)flags);
}
break;
case mSpeaker:
{
long flags;
MCDoAction(dm->mc,mcActionGetFlags,&flags);
dm->speaker = !dm->speaker;
if(dm->speaker)
flags &= ~mcFlagSuppressSpeakerButton;
else
flags |= mcFlagSuppressSpeakerButton;
MCDoAction(dm->mc,mcActionSetFlags,(void *)flags);
}
break;
case mEnlarge:
{
Rect r;
FrameThisDocMovie(d,d->whichMovie,0);
thisError = MCGetControllerBoundsRect(dm->mc,&r);
r.right = r.left + (r.right - r.left) * 9 / 8;
r.bottom = r.top + (r.bottom - r.top) * 9 / 8;
thisError = MCSetControllerBoundsRect(dm->mc,&r);
FrameThisDocMovie(d,d->whichMovie,1);
}
case mGrowable:
{
Rect r;
dm->growable = !dm->growable;
if(dm->growable)
SetRect(&r, 0, 0, 0,0);
else
SetRect(&r, 0, 0, 9000, 9000);
MCDoAction(dm->mc, mcActionSetGrowBoxBounds, &r);
}
}
SetDocMenus(d);
}
void BumpControllerDownDoc(short n,short menuItem,short menuRef)
{
register TDoc *d;
register DocMovie *dm;
Rect r;
OSErr thisError;
d = &gDoc[n-kFirstDocWindow];
dm = &d->m[d->whichMovie];
FrameThisDocMovie(d,d->whichMovie,0);
MCGetControllerBoundsRect(dm->mc,&r);
OffsetRect(&r,0,15);
MCSetControllerBoundsRect(dm->mc,&r);
FrameThisDocMovie(d,d->whichMovie,1);
SetDocMenus(d);
}
void SelectAll(short n)
{
register TDoc *d;
register DocMovie *dm;
TimeRecord tr;
short mods;
mods = GetModKeys();
d = &gDoc[n-kFirstDocWindow];
dm = &d->m[d->whichMovie];
tr.base = 0;
tr.scale = GetMovieTimeScale(dm->movie);
tr.value.hi = 0;
tr.value.lo = 0;
MCDoAction(dm->mc, mcActionSetSelectionBegin, (void *)&tr);
if(!(mods & shiftKey)) /* shift - select none */
tr.value.lo = GetMovieDuration(dm->movie);
MCDoAction(dm->mc, mcActionSetSelectionDuration, (void *)&tr);
}
short GetModKeys(void)
/*
* return the modifier keys just like in an eventrecord
*/
{
short result;
KeyMap keys;
GetKeys(keys);
result = 0;
if(keys[1] & 1)
result |= shiftKey;
if(keys[1] & 4)
result |= optionKey;
if(keys[1] & 8)
result |= controlKey;
if(keys[1] & 0x8000)
result |= cmdKey;
return result;
}
void InitVars()
/*
* Called once at startup: yes, it
* inits the vars.
*/
{
TDoc *dp;
short i;
EnterMovies();
for(i = 0; i<kDocMax; i++)
{
dp = &gDoc[i];
dp->used = false;
}
gDocCount = 0;
}
void Bootstrap()
{
/*** File Menu ***/
InstallMenu("\pFile",nil,0);
InstallMenuItem("\pOpen/O",(void *)OpenDoc,mOpen);
InstallMenuItem("\pClose/W",(void *)GoAwayDoc,-mClose);
InstallMenuItem("\p(-",nil,0);
InstallMenuItem("\pQuit/Q",(void *)LetsQuit,0);
/*** Edit Menu ***/
InstallEditMenu(nil,CutDoc,CopyDoc,PasteDoc,nil);
InstallMenuItem("\p(-",nil,0);
InstallMenuItem("\pCopy Frame/F",(void *)CopyFrameEdit,mCopyFrame);
InstallMenuItem("\pSelect All/A",(void *)SelectAll,mSelectAll);
/*** Playback Menu ***/
InstallMenu("\pPlayback",0,0);
InstallMenuItem("\pLoop/L",ToggleSomethingDoc,-mLoop);
InstallMenuItem("\pPalindrome/P",ToggleSomethingDoc,-mPalindrome);
InstallMenuItem("\pEdit/E",ToggleSomethingDoc,-mEdit);
InstallMenuItem("\pHide Controller/H",ToggleSomethingDoc,-mHideController);
InstallMenuItem("\pUse Badge/B",ToggleSomethingDoc,-mUseBadge);
InstallMenuItem("\pAttach/T",ToggleSomethingDoc,-mAttach);
InstallMenuItem("\pFrame Movie/1",ToggleSomethingDoc,-mFrame);
InstallMenuItem("\pShow Steppers/2",ToggleSomethingDoc,-mSteppers);
InstallMenuItem("\pShow Speaker/3",ToggleSomethingDoc,-mSpeaker);
InstallMenuItem("\pGrowable/4",ToggleSomethingDoc,-mGrowable);
InstallMenuItem("\pEnlarge/=",ToggleSomethingDoc,-mEnlarge);
InstallMenuItem("\pBump Controller Down/9",BumpControllerDownDoc,-mBumpControllerDown);
InitVars();
}
void Hatstrap()
/*
* clean up
*/
{
}